/*
 * SPDX-FileCopyrightText: 2017-2025 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Unlicense OR CC0-1.0
 */

#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include "sdkconfig.h"
#include "soc/soc_caps.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_sleep.h"
#include "esp_log.h"
#include "driver/rtc_io.h"
#include "nvs_flash.h"
#include "nvs.h"
#include "driver/gpio.h"

// ========================== 关键修改：直接定义宏为 GPIO0（IO0）==========================
// 定义 CONFIG_EXAMPLE_GPIO_WAKEUP_PIN 为 GPIO_NUM_0（覆盖 menuconfig 配置）
#define CONFIG_EXAMPLE_GPIO_WAKEUP_PIN  GPIO_NUM_0
// 定义 DEFAULT_WAKEUP_PIN 为 GPIO_NUM_0（与上面保持一致，避免引脚不匹配）
#define DEFAULT_WAKEUP_PIN              GPIO_NUM_0
// 定义触发电平：低电平触发（适配“IO0→按键→GND”的硬件连接，可根据实际调整）
#define DEFAULT_WAKEUP_LEVEL            ESP_GPIO_WAKEUP_GPIO_LOW

// ========================== 原函数修改后 ===========================
void example_deep_sleep_register_gpio_wakeup(void)
{
    const gpio_config_t config = {
        // 现在 pin_bit_mask 指向 GPIO0（由 CONFIG_EXAMPLE_GPIO_WAKEUP_PIN 定义）
        .pin_bit_mask = BIT(CONFIG_EXAMPLE_GPIO_WAKEUP_PIN),
        .mode = GPIO_MODE_INPUT,
        // 补充：添加上下拉配置（避免引脚悬空误触发，关键！）
        .pull_up_en = GPIO_PULLUP_ENABLE,  // 使能上拉（适配按键接地）
        .pull_down_en = GPIO_PULLDOWN_DISABLE,
        .intr_type = GPIO_INTR_DISABLE,    // 深度睡眠唤醒无需中断
    };
    ESP_ERROR_CHECK(gpio_config(&config));
    // 唤醒引脚和电平与定义一致（均为 GPIO0 + 低电平）
    ESP_ERROR_CHECK(esp_deep_sleep_enable_gpio_wakeup(
        BIT(DEFAULT_WAKEUP_PIN),  // 引脚：GPIO0
        DEFAULT_WAKEUP_LEVEL      // 电平：低电平触发
    ));
    // 打印确认：显示当前唤醒引脚是 GPIO0
    printf("Enabling GPIO wakeup on pin GPIO%d (low level trigger)\n", DEFAULT_WAKEUP_PIN);
}

void esp_sleep_st(void *args)
{
   vTaskDelay(5000 / portTICK_PERIOD_MS);
   esp_deep_sleep_start();
   
}

void app_main(void)
{
    example_deep_sleep_register_gpio_wakeup();                         //设置唤醒脚
    xTaskCreate(esp_sleep_st, "esp_sleep_st", 4096, NULL, 6, NULL);    //开启任务

}




